package br.infnet.blocoarquiteturajava.managebean;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.component.html.HtmlSelectOneMenu;
import javax.faces.event.ValueChangeEvent;

import br.infnet.blocoarquiteturajava.dominio.Agencia;
import br.infnet.blocoarquiteturajava.dominio.Conta;
import br.infnet.blocoarquiteturajava.dominio.ContaCorrente;
import br.infnet.blocoarquiteturajava.dominio.TipoDeConta;
import br.infnet.blocoarquiteturajava.dominio.TipoDePessoa;
import br.infnet.blocoarquiteturajava.utils.GeraContaUtils;

@ManagedBean(name = "contaCorrenteMB")
@RequestScoped
public class ContaCorrenteMB implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 5056846288689303026L;
	// ------------------ Componentes da pagina
	private TipoDePessoa natureza;
	private HtmlSelectOneMenu modalidade;
	private boolean showAgencia = true;
	private boolean showModalidade = true;
	private boolean showTipoConta = true;
	private boolean habilitaLimitePreAprovado;
	private boolean habilitaLimiteCredito;
	private boolean liberarLimiteCredito;
	private boolean liberarLimitePreAprovado;
	private Agencia agencia;
	private Long numeroConta;
	private Conta conta;

	public boolean isHabilitaLimitePreAprovado() {
		return habilitaLimitePreAprovado;
	}

	public void setHabilitaLimitePreAprovado(boolean habilitaLimitePreAprovado) {
		this.habilitaLimitePreAprovado = habilitaLimitePreAprovado;
	}

	public boolean isHabilitaLimiteCredito() {
		return habilitaLimiteCredito;
	}

	public void setHabilitaLimiteCredito(boolean habilitaLimiteCredito) {
		this.habilitaLimiteCredito = habilitaLimiteCredito;
	}

	public Long getNumeroConta() {
		return numeroConta;
	}

	public void setNumeroConta(Long numeroConta) {
		this.numeroConta = numeroConta;
	}

	public Agencia getAgencia() {
		return agencia;
	}

	public void setAgencia(Agencia agencia) {
		this.agencia = agencia;
	}

	public boolean isLiberarLimitePreAprovado() {
		return liberarLimitePreAprovado;
	}

	public void setLiberarLimitePreAprovado(boolean liberarLimitePreAprovado) {
		this.liberarLimitePreAprovado = liberarLimitePreAprovado;
	}

	public boolean isLiberarLimiteCredito() {
		return liberarLimiteCredito;
	}

	public void setLiberarLimiteCredito(boolean liberarLimiteCredito) {
		this.liberarLimiteCredito = liberarLimiteCredito;
	}

	public boolean isShowModalidade() {
		return showModalidade;
	}

	public void setShowModalidade(boolean showModalidade) {
		this.showModalidade = showModalidade;
	}

	public boolean isShowTipoConta() {
		return showTipoConta;
	}

	public void setShowTipoConta(boolean showTipoConta) {
		this.showTipoConta = showTipoConta;
	}

	public boolean isShowAgencia() {
		return showAgencia;
	}

	public void setShowAgencia(boolean showAgencia) {
		this.showAgencia = showAgencia;
	}

	public TipoDePessoa getNatureza() {
		return natureza;
	}

	public void setNatureza(TipoDePessoa natureza) {
		this.natureza = natureza;
	}

	public HtmlSelectOneMenu getModalidade() {
		return modalidade;
	}

	public void setModalidade(HtmlSelectOneMenu modalidade) {
		this.modalidade = modalidade;
	}

	public Conta getConta() {
		return conta;
	}

	public void setConta(Conta conta) {
		this.conta = conta;
	}

	public ContaCorrenteMB() {
		super();
		conta = new ContaCorrente(agencia);
		numeroConta = GeraContaUtils.gerarNovaConta();
		agencia = new Agencia();
		agencia.setNumero("016");
	}

	public void changeModalidade(ValueChangeEvent event) {
		String value = (String) event.getNewValue();
		if (value.equals(TipoDeConta.SALARIO)) {
			habilitaLimiteCredito = false;
			habilitaLimitePreAprovado = false;
		} else {
			habilitaLimiteCredito = true;
			habilitaLimitePreAprovado = true;
		}
	}

	public void salvar() {
		
	}

	public void buscarCEP(ValueChangeEvent event) {

	}
}
